package CasasJusticia.Modelo.Estadisticas
{
	import CasasJusticia.Modelo.Estadisticas.Variables.*;
	
	import mx.charts.ChartItem;
	import mx.charts.chartClasses.Series;
	import mx.charts.series.*;
	import mx.charts.series.items.BarSeriesItem;
	import mx.collections.ArrayCollection;
	import mx.controls.dataGridClasses.DataGridColumn;
	
	public class ConsultasEstadisticas
	{
		public static var NombreCampoTotal:String = "Total";
		
		public static function PorEstadoCivil(array:ArrayCollection, tipoSolicitud:String):ArrayCollection
		{
			return EstadoCivil.ObtenerRegistros(array, tipoSolicitud);
		}
		
		public static function PorEstrato(array:ArrayCollection, tipoSolicitud:String):ArrayCollection
		{
			return Estrato.ObtenerRegistros(array, tipoSolicitud);
		}	
		
		public static function PorGenero(array:ArrayCollection, tipoSolicitud:String):ArrayCollection
		{
			return Genero.ObtenerRegistros(array, tipoSolicitud);
		}	
		
		public static function PorGrupoEtario(array:ArrayCollection, tipoSolicitud:String):ArrayCollection
		{
			return GrupoEtario.ObtenerRegistros(array, tipoSolicitud);
		}		
		
		public static function PorGrupoEtnico(array:ArrayCollection, tipoSolicitud:String):ArrayCollection
		{
			return GrupoEtnico.ObtenerRegistros(array, tipoSolicitud);
		}
		
		public static function PorNivelEducativo(array:ArrayCollection, tipoSolicitud:String):ArrayCollection
		{
			return NivelEducativo.ObtenerRegistros(array, tipoSolicitud);
		}	
		
		public static function PorProgramaBenefico(array:ArrayCollection, tipoSolicitud:String):ArrayCollection
		{
			return ProgramaBenefico.ObtenerRegistros(array, tipoSolicitud);
		}			
		
		public static function PorSexo(array:ArrayCollection, tipoSolicitud:String):ArrayCollection
		{
			return Sexo.ObtenerRegistros(array, tipoSolicitud);
		}	
		
		public static function CategoriasVariable(array:ArrayCollection, tipoSolicitud:String, variableSeleccionada:String):Array
		{
			var categorias:Array = new Array();
			//var valoresCategorias:Array = new Array();
			
			switch(variableSeleccionada)
			{
				case Variable.Sexo:
					categorias = Sexo.ObtenerCategoriasVariable(array);					
					break;
				case Variable.GrupoEtnico:
					categorias = GrupoEtnico.ObtenerCategoriasVariable(array);											
					break;
				case Variable.GrupoEtareo:
					categorias = GrupoEtario.ObtenerCategoriasVariable(array);					
					break;
				case Variable.Estrato:
					categorias = Estrato.ObtenerCategoriasVariable(array);					
					break;
				case Variable.NivelEducativo:
					categorias = NivelEducativo.ObtenerCategoriasVariable(array);					
					break;
				case Variable.Genero:
					categorias = Genero.ObtenerCategoriasVariable(array);					
					break;
				case Variable.ProgramaBenefico:
					categorias = ProgramaBenefico.ObtenerCategoriasVariable(array);					
					break;
				case Variable.EstadoCivil:
					categorias = EstadoCivil.ObtenerCategoriasVariable(array);								
					break;	
			}			
			
			//valoresCategorias.sort();
			categorias.sort();

			var barraCombinada:BarSet = new BarSet();
			//var barraCombinada:ColumnSet = new ColumnSet();
			barraCombinada.type = "stacked";
			
			var series:Array = new Array();
			
			for each(var valorCategoria:String in categorias)
			{
				var nuevaCategoria:BarSeries = new BarSeries();
				nuevaCategoria.yField = tipoSolicitud;
				nuevaCategoria.xField = valorCategoria;				
				nuevaCategoria.displayName = valorCategoria;
				nuevaCategoria.id = valorCategoria;
				nuevaCategoria.showInAutomationHierarchy = true;

				/*var nuevaCategoria:ColumnSeries = new ColumnSeries();
				nuevaCategoria.xField = tipoSolicitud;
				nuevaCategoria.yField = valorCategoria;
				nuevaCategoria.displayName = valorCategoria;*/				
				
				//categorias.push(nuevaCategoria);
				series.push(nuevaCategoria);
			}
			barraCombinada.series = series;			
			
			return [barraCombinada];			
		}
		
		public static function ObtenerRegistrosTabulados(resultados:ArrayCollection, tipoSolicitud:String, variableSeleccionada:String):ArrayCollection
		{	
			if (resultados.length <= 0)
				return new ArrayCollection; 
			
			var categorias:Array = new Array();
			var registros:ArrayCollection = new ArrayCollection();
			
			switch(variableSeleccionada)
			{
				case Variable.Sexo:
					categorias = Sexo.ObtenerCategoriasVariable(resultados);
					registros = Sexo.ObtenerRegistros(resultados, tipoSolicitud);
					break;
				case Variable.GrupoEtnico:
					categorias = GrupoEtnico.ObtenerCategoriasVariable(resultados);
					registros = GrupoEtnico.ObtenerRegistros(resultados, tipoSolicitud);						
					break;
				case Variable.GrupoEtareo:
					categorias = GrupoEtario.ObtenerCategoriasVariable(resultados);
					registros = GrupoEtario.ObtenerRegistros(resultados, tipoSolicitud);
					break;
				case Variable.Estrato:
					categorias = Estrato.ObtenerCategoriasVariable(resultados);
					registros = Estrato.ObtenerRegistros(resultados, tipoSolicitud);
					break;
				case Variable.NivelEducativo:
					categorias = NivelEducativo.ObtenerCategoriasVariable(resultados);
					registros = NivelEducativo.ObtenerRegistros(resultados, tipoSolicitud);
					break;
				case Variable.Genero:
					categorias = Genero.ObtenerCategoriasVariable(resultados);
					registros = Genero.ObtenerRegistros(resultados, tipoSolicitud);
					break;
				case Variable.ProgramaBenefico:
					categorias = ProgramaBenefico.ObtenerCategoriasVariable(resultados);
					registros = ProgramaBenefico.ObtenerRegistros(resultados, tipoSolicitud);
					break;
				case Variable.EstadoCivil:
					categorias = EstadoCivil.ObtenerCategoriasVariable(resultados);
					registros = EstadoCivil.ObtenerRegistros(resultados, tipoSolicitud);						
					break;	
			}				
			
			registros.addItem(new Object());
			
			var nuevoRegistro:Object = new Object();
			nuevoRegistro[tipoSolicitud] = "TOTAL";
			
			//Registra los totales de las filas
			var totalFila:Number = 0;
			//Registra los totales de las columnas
			var totalColumna:Number = 0;
			
			for each(var categoria:String in categorias)
			{				
				var totalCategoria:Number = 0;
				for each(var registro:Object in registros)
				{
					var valorCategoria:Number = Number(registro[categoria]);
					if (!isNaN(valorCategoria))
						totalCategoria += valorCategoria;
					
					var valorFila:Number = Number(registro[ConsultasEstadisticas.NombreCampoTotal]);
					
					if (!isNaN(valorCategoria))
						totalFila += valorCategoria;
				}
				nuevoRegistro[categoria] = totalCategoria;
				totalColumna += totalCategoria;
			}
			
			nuevoRegistro[ConsultasEstadisticas.NombreCampoTotal] = totalColumna;
			
			registros.addItem(nuevoRegistro);
			return registros;
		}
		
		public static function ColumnasReporte(array:ArrayCollection, tipoSolicitud:String, variableSeleccionada:String):Array
		{	
			var columnas:Array = new Array();
			
			var nombreCampoTotal:String;
			
			var primeraColumna:DataGridColumn = new DataGridColumn();
			primeraColumna.dataField = tipoSolicitud;
			primeraColumna.sortable = false;
			columnas.push(primeraColumna);
			
			var valoresCategorias:Array = new Array();			
			
			switch(variableSeleccionada)
			{
				case Variable.Sexo:
					valoresCategorias = Sexo.ObtenerCategoriasVariable(array);
					nombreCampoTotal = Sexo.nombreCampoTotal;
					break;
				case Variable.GrupoEtnico:
					valoresCategorias = GrupoEtnico.ObtenerCategoriasVariable(array);
					nombreCampoTotal = GrupoEtnico.nombreCampoTotal;
					break;
				case Variable.GrupoEtareo:
					valoresCategorias = GrupoEtario.ObtenerCategoriasVariable(array);
					nombreCampoTotal = GrupoEtario.nombreCampoTotal;
					break;
				case Variable.Estrato:
					valoresCategorias = Estrato.ObtenerCategoriasVariable(array);
					nombreCampoTotal = Estrato.nombreCampoTotal;
					break;
				case Variable.NivelEducativo:
					valoresCategorias = NivelEducativo.ObtenerCategoriasVariable(array);
					nombreCampoTotal = NivelEducativo.nombreCampoTotal;
					break;
				case Variable.Genero:
					valoresCategorias = Genero.ObtenerCategoriasVariable(array);
					nombreCampoTotal = Genero.nombreCampoTotal;
					break;
				case Variable.ProgramaBenefico:
					valoresCategorias = ProgramaBenefico.ObtenerCategoriasVariable(array);
					nombreCampoTotal = ProgramaBenefico.nombreCampoTotal;
					break;
				case Variable.EstadoCivil:
					valoresCategorias = EstadoCivil.ObtenerCategoriasVariable(array);
					nombreCampoTotal = EstadoCivil.nombreCampoTotal;
					break;	
			}		
			
			valoresCategorias.sort();
			
			for each(var categoria:String in valoresCategorias)
			{
				var columna:DataGridColumn = new DataGridColumn();
				columna.dataField = categoria;
				columna.sortable = false;
				columnas.push(columna);
			}
			
			primeraColumna = new DataGridColumn();
			primeraColumna.dataField = nombreCampoTotal;
			primeraColumna.sortable = false;
			columnas.push(primeraColumna);
			
			return columnas;
		}			
	}
}